package com.party.core.service.member;

import com.party.common.paging.Page;
import com.party.core.model.member.CopartnerAnalyzeQuery;
import com.party.core.model.member.MemberCopartnerDetail;
import com.party.core.model.member.MemberCopartnerDetailWithMember;
import com.party.core.service.IBaseService;

import java.util.Date;
import java.util.List;

/**
 * 合伙人数据统计详情服务接口
 * Created by wei.li.
 *
 * @date 2018/1/16 0016
 * @time 11:48
 */
public interface IMemberCopartnerDetailService extends IBaseService<MemberCopartnerDetail> {

    /**
     * 获取或者设置
     *
     * @param memberId 会员编号
     * @param date 日期
     * @return 合伙人统计详情
     */
    MemberCopartnerDetail getSet(String memberId, Date date, String option);

    /**
     * 获取或者设置
     *
     * @param memberId 会员编号
     * @param date 日期
     * @return 合伙人统计详情
     */
    MemberCopartnerDetail getSet(String memberId, Date date);


    /**
     * 获取统计详情
     *
     * @param memberId 会员编号
     * @param date 日期
     * @return 统计详情
     */
    MemberCopartnerDetail get(String memberId, Date date, String option);

    /**
     * 合伙人总计
     *
     * @param copartnerAnalyzeQuery 查询参数
     * @param page 分页参数
     * @return 统计数据列表
     */
    List<MemberCopartnerDetailWithMember> sumList(CopartnerAnalyzeQuery copartnerAnalyzeQuery, Page page);

    /**
     * 合伙人数据统计
     *
     * @param copartnerAnalyzeQuery 查询参数
     * @return 统计数据列表
     */
    MemberCopartnerDetailWithMember sum(CopartnerAnalyzeQuery copartnerAnalyzeQuery);

    /**
     * 根据条件查询
     *
     * @param copartnerAnalyzeQuery 查询参数
     * @return 查询结果
     */
    List<MemberCopartnerDetail> queryList(CopartnerAnalyzeQuery copartnerAnalyzeQuery);

    void updateBrokerage(String memberId, Double brokerage, Boolean isContain, boolean isBegin, double withdrawalTotal);

    void updateSuccess(String projectId, String memberId);

    void updateApplyNum(String projectId, String memberId);

    /**
     * 活动退款
     *
     * @param memberId 用户id
     * @param payment  金额
     * @param option   操作 add/sub
     */
    void updateApplyRefund(String memberId, Double payment, String option);

    /**
     * 活动图款佣金处理
     *
     * @param memberId      用户id
     * @param brokerage     佣金
     * @param isMyBrokerage 是否为我的佣金
     * @param option        操作 add/sub
     */
    void updateApplyRefundBrokerage(String memberId, float brokerage,
                                    boolean isMyBrokerage, String option,
                                    boolean isBegin, double withdrawalTotal);

    void updateOrderAnalyze(Float payment, String memberId);

    void updateOrderAnalyzeSub(Float payment, String memberId, String option);

    void updateSuccessSub(String projectId, String memberId, String option);

    /**
     * @param payment  金额
     * @param memberId 合伙人id
     * @return
     * @Author yifeng
     * @Description 众筹成功处理合伙人统计数
     * @Date 16:32 2019/4/18
     **/
    void updateCrowdfundSuccess(Float payment, String memberId);
}
